﻿
Imports System.IO
Imports SearchOption = Microsoft.VisualBasic.FileIO.SearchOption

Public Class Empaquetador
    Inherits ProcesadorComun

    Private _parametro As String
    Public Event Verbose(ByVal mensaje As String)


    Public WriteOnly Property Parametro As String
        Set(value As String)
            _parametro = value
        End Set
    End Property

    Public Sub Empaqueta(ByVal directorio As String, ByVal tipoArchivos As String, ByVal output As String)

        If Not Directory.Exists(directorio & "Packs") Then Directory.CreateDirectory(directorio & "Packs")

        Dim inStartInfo As New ProcessStartInfo
        inStartInfo.WindowStyle = ProcessWindowStyle.Hidden
        inStartInfo.FileName = "cmd.exe"

        RaiseEvent Verbose(String.Format("Empaquetando archivos ""{0}"".", AlinearIzquierda(tipoArchivos, 70)))

        If tipoArchivos = "NO-EXTENSION" Then
            inStartInfo.Arguments = "/C """ &
                                    GeneraParametros(_parametro,
                                                     String.Format("{1}Packs\Paq_{0}.rar", output, directorio),
                                                     directorio & "\*", Ejecutable) & """"
        Else
            inStartInfo.Arguments = "/C """ &
                                    GeneraParametros(_parametro,
                                                     String.Format("{1}Packs\Paq_{0}.rar", output, directorio),
                                                     directorio & "\*" & tipoArchivos, Ejecutable) & """"
        End If
        Process.Start(inStartInfo).WaitForExit()

        For Each fichero In My.Computer.FileSystem.GetFiles(directorio, SearchOption.SearchAllSubDirectories)
            If Not fichero = (directorio & "Packs") Then
                If GetExtension(fichero) = tipoArchivos Then
                    My.Computer.FileSystem.DeleteFile(fichero)
                    Dim myDir As DirectoryInfo = New DirectoryInfo(My.Computer.FileSystem.GetParentPath(fichero))
                    If Not myDir.EnumerateFiles().Any() AndAlso Not myDir.EnumerateDirectories().Any() Then
                        Directory.Delete(My.Computer.FileSystem.GetParentPath(fichero))
                    End If
                End If
            End If
        Next
    End Sub

    Public Sub New(ByVal nombre As String, ByVal ejecutable As String, ByVal path() As String)
        If BuscaEjecutable(path, ejecutable) Then
            RaiseEvent Verbose("Procesador """ & ejecutable & """ vinculado!")
            Me.Nombre = nombre
        End If
    End Sub
End Class
